package sy.service.base;

import java.io.Serializable;
import java.util.List;

import sy.util.base.QueryFilter;

/**
 * 基础服务接口
 * 
 * @author 孙宇
 * 
 * @param <T>
 * @param <PK>
 */
public abstract interface BaseServiceI<T extends Serializable, PK extends Serializable> {

	/**
	 * 获得一个对象
	 * 
	 * @param pk
	 *            主键
	 * @return
	 */
	T get(PK pk);

	/**
	 * 保存一个对象
	 * 
	 * @param o
	 * @return
	 */
	T save(T o);

	/**
	 * 更新一个对象
	 * 
	 * @param o
	 * @return
	 */
	T update(T o);

	/**
	 * 保存或更新对象
	 * 
	 * @param o
	 * @return
	 */
	T saveOrUpdate(T o);

	/**
	 * 删除一个对象
	 * 
	 * @param o
	 */
	void delete(T o);

	/**
	 * 查找一个对象
	 * 
	 * @param filter
	 *            过滤条件
	 * @return
	 */
	T find(QueryFilter filter);

	/**
	 * 查找所有对象，可带分页信息和过滤条件，可排序结果集
	 * 
	 * @param filter
	 *            过滤条件
	 * @return
	 */
	List<T> findAll(QueryFilter filter);

	/**
	 * 查找所有对象
	 * 
	 * @return
	 */
	List<T> findAll();

}
